package cn.biplam.front.htmlscript.script;

import cn.biplam.common.tools.TOOLS;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.front.html.base.HtmlWindow;

/**
 * FlowTable操作脚本
 * @author XiaoRuxing Oct 9, 20095:48:38 PM
 * @version 1.0
 */
public class FlowTableScript {

	/**
	 *  
	 * @param tableId     表格ID
	 * @param pageCompId 分页组件ID
	 * @return 设置分页组件宽度与表格宽度相等的脚本
	 */
	public static String setPageCompSize(
			String tableId,
			String pageCompId
			){
		return "$('"+pageCompId+"').style.width="+"$('"+tableId+"').scrollWidth;";
	}
	
	/**
	 *  调整FlowTable大小,当出现滚动条时设置表格为高度加上滚动条高度
	 * @param tableId 表格ID
	 * @return 调整FlowTable大小脚本
	 */
	public static String flowTableResize(String tableId){
		return "flowTabbleResize('"+tableId+"');";
	}
	
	/**
	 * 获取删除表格行刷新脚本
	 * @param rowId 行页面ID
	 * @return 删除表格行刷新脚本
	 */
	public static String removeRow(String rowId){
		return "removeRow('"+rowId+"');";
	}
	
	/**
	 *  编辑行刷新提交脚本
	 * @param rowID 行页面ID
	 * @return 编辑行刷新提交脚本
	 */
	public static String rowEditRefresh(String rowID){
		return "ter('"+rowID+"')";
	}
	
	/**
	 *  添加行行刷新提交脚本
	 * @param tableID 表格ID
	 * @param rid     行记录ID
	 * @return 添加行行刷新提交脚本
	 */
	public static String rowAddRefresh(String tableID, String rid){
		return "tar('"+tableID+"','"+rid+"')";
	}
	
	
	/**
	 * FlowTable行刷新脚本
	 * @param srcRowId    被刷新的表格行页面ID
	 * @param curCol        行内容
	 * @return 刷新表格行脚本
	 * @throws ErrorMessage 
	 */
	public static String refreshRow(String srcRowId, 
			HtmlWindow curCol) throws ErrorMessage{
		if(curCol == null)return null;
		return refreshRow(srcRowId, curCol,curCol.getID());
	}
	
	/**
	 * FlowTable行刷新脚本
	 * @param srcRowId    被刷新的表格行页面ID
	 * @param curCol        行内容
	 * @param curTableId    行表格ID
	 * @return 刷新表格行脚本
	 * @throws ErrorMessage 
	 */
	public static String refreshRow(String srcRowId, 
			HtmlWindow curCol,
			String curTableId) throws ErrorMessage{
		
		if(curCol == null)return null;
		
		//获取当前行内容文本描述
		String text = curCol.draw();
		//处理行内容文本特殊字符
		text = setRowText(text);
		
		if(text!=null){
			//替换行内容字符串中的表格ID为被刷新表格ID
			String srcTabId = srcRowId.substring(0, srcRowId.length()-1);
			text = text.replace(curTableId+"[1", srcTabId);
		}
		
		//生成刷新行脚本
		String script = "refreshRow('"+srcRowId+"',\""+text+"\");";
		return script;
	}
	
	/**
	 *  FlowTable添加行页面刷新脚本,插入到表格末尾
	 * @param tableId   被刷新表格页面ID
	 * @param rowContent   行内容
	 * @return 刷新表格行脚本
	 * @throws ErrorMessage 
	 */
	public static String addRow(String tableId, //被刷新表格页面ID
			HtmlWindow rowContent                    //行内容
			) throws ErrorMessage{
		return addRow(tableId, rowContent,null);
	}
	
	/**
	 *  FlowTable添加行页面刷新脚本
	 * @param tableId   被刷新表格页面ID
	 * @param rowContent 行内容
	 * @param rowIndex   当前行排序号<BR>
	 * 					 rowIndex小于零时插入到从表尾数起倒数第rowIndex行,如-1,插入到倒数第一行和倒数第二行之间<BR>
	 * 					 未设置时插入到表尾<BR>
	 * @return 刷新表格行脚本
	 * @throws ErrorMessage 
	 */
	public static String addRow(String tableId, //被刷新表格页面ID
			HtmlWindow rowContent,                     //行内容
			String rowIndex                     //当前行排序号
			) throws ErrorMessage{
		
		if(rowContent==null)return null;
		
		//当前行文本内容
		String rowText = rowContent.draw();
		//当前行ID
		String curTableId = rowContent.getID();
		//处理行内容文本特殊字符
		rowText = setRowText(rowText);
		//生成当前行页面ID
		String rowId = tableId+"["+ TOOLS.getId() +"]";
		//将行内容文本中所有行ID替换为指定的行ID
		rowText = rowText.replace(curTableId+"[1", rowId.substring(0, rowId.length()-1));
		
		//生成刷新行脚本,addRow(tableId,rowText,rowId,rowIndex)
		String script = addRow(tableId, rowText, rowId, rowIndex);
		return script;
	}
	
	/**
	 *  添加表格行脚本
	 */
	private static String addRow(String tableId, //被刷新表格页面ID
			String rowText,                       //行内容
			String rowId,                         //当前行页面ID
			String rowIndex ){
		StringBuilder sp = new StringBuilder();
		sp.append("addRow(");
		sp.append("'");
		sp.append(tableId);
		sp.append("',");
		sp.append("\"");
		sp.append(rowText);
		sp.append("\",");
		sp.append("'");
		sp.append(rowId);
		sp.append("'");
		if(rowIndex!=null){
			sp.append(",'");
			sp.append(rowIndex);
			sp.append("'");
		}
		sp.append(");");
		return sp.toString();
	}
	
	/**
	 *  设置行修改和删除时的行Html文本
	 *  处理行内容文本特殊字符串(单引号、双引号和换行符)
	 */
	private static String setRowText(String text
			){
		if(text!=null){
			//处理行内容文本特殊字符串(单引号、双引号和换行符)
			text = text.replace("'", "\'");
			text = text.replace("\"", "\\\"");
			text = TOOLS.removeBreakLine(text);
		}
		return text;
	}
}
